package ui;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

import javax.swing.*;

import Work.*;

/*全表查询功能实现，以及另外三种单项查询的界面*/
public class BookSearch1 extends JFrame implements ActionListener {

	JTextField jtf;
	private JButton returnbutton;

	Jdbc db1 = new Jdbc();

	public void SearchAlllibrarian(Jdbc db) {
		int i = 0;
		String[][] list = new String[9000][5];
		// 获得全部查询结果（以列表形式返回）
		ArrayList<Book> booklist = db.searchBook();
		// ArrayList集合转数组
		for (Book book : booklist) {
			list[i][0] = book.getId();
			list[i][1] = book.getName();
			list[i][2] = book.getAuthor();
			list[i][3] = String.valueOf(book.getPrice());
			list[i][4] = String.valueOf(book.getAmount());
			i++;
		}

		String ss[] = { "书籍编号", "书籍名称", "作者", "价格", "剩余数量" };// 表格的第一行文字
		JTable JT = new JTable(list, ss);// 创建表格，第一个参数为显示的数据（数组），第二个数组是表格的第一行文字
		// VERTICAL_SCROLLBAR_AS_NEEDED纵向,HORIZONTAL_SCROLLBAR_AS_NEEDED横向
		JScrollPane JS = new JScrollPane(JT, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
		JPanel p1 = new JPanel();

		setLayout(new BorderLayout());
		add(JS, BorderLayout.CENTER);
		add(p1, BorderLayout.SOUTH);
		// 监听右上角的退出按钮
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent windowEvent) {
				System.exit(0);
			}
		});
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setTitle("全部书籍信息展示");
		setSize(500, 400);// 设置窗口大小
		setLocationRelativeTo(null);// 设置窗口居中
		returnbutton = new JButton("返回");
		p1.add(returnbutton);
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnlibrarian");
		setVisible(true);// 显示窗口
		add(JS);// 将滚动条加入窗口
	}
	public void SearchAllreader(Jdbc db) {
		int i = 0;
		String[][] list = new String[9000][4];
		// 获得全部查询结果（以列表形式返回）
		ArrayList<Book> booklist = db.searchR_Book();
		// ArrayList集合转数组
		for (Book book : booklist) {
			list[i][0] = book.getId();
			list[i][1] = book.getName();
			list[i][2] = book.getAuthor();
			list[i][3] = String.valueOf(book.getPrice());
			i++;
		}

		String ss[] = { "书籍编号", "书籍名称", "作者", "价格" };// 表格的第一行文字
		JTable JT = new JTable(list, ss);// 创建表格，第一个参数为显示的数据（数组），第二个数组是表格的第一行文字
		// VERTICAL_SCROLLBAR_AS_NEEDED纵向,HORIZONTAL_SCROLLBAR_AS_NEEDED横向
		JScrollPane JS = new JScrollPane(JT, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
		JPanel p1 = new JPanel();

		setLayout(new BorderLayout());
		add(JS, BorderLayout.CENTER);
		add(p1, BorderLayout.SOUTH);
		// 监听右上角的退出按钮
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent windowEvent) {
				System.exit(0);
			}
		});
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setTitle("全部书籍信息展示");
		setSize(400, 400);// 设置窗口大小
		setLocationRelativeTo(null);// 设置窗口居中
		returnbutton = new JButton("返回");
		p1.add(returnbutton);
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnreader");
		setVisible(true);// 显示窗口
		add(JS);// 将滚动条加入窗口
	}

	public void Searchb_idbuttonlibrarian() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按书籍编号查询"));
		JLabel jl1 = new JLabel("书籍编号:");

		jtf = new JTextField(10);

		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes1");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnlibrarian");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("书籍编号查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);

	}
	public void Searchb_idbuttonreader() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按书籍编号查询"));
		JLabel jl1 = new JLabel("书籍编号:");

		jtf = new JTextField(10);

		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes2");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnreader");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("书籍编号查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);

	}

	public void Searchb_namebuttonlibrarian() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按书籍名称查询"));
		JLabel jl1 = new JLabel("书籍名称:");
		jtf = new JTextField(10);
		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes3");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnlibrarian");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("书籍名称查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);
	}
	public void Searchb_namebuttonreader() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按书籍名称查询"));
		JLabel jl1 = new JLabel("书籍名称:");
		jtf = new JTextField(10);
		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes4");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnreader");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("书籍名称查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);
	}
	

	public void Searchb_authorbuttonlibrarian() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按作者查询"));
		JLabel jl1 = new JLabel("作者姓名:");
		jtf = new JTextField(10);
		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes5");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnlibrarian");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("作者查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);
	}public void Searchb_authorbuttonreader() {
		JPanel jpc = new JPanel();// 默认流式布局
		JPanel jp1 = new JPanel(new GridLayout(1, 2, 0, 10));// 设置新面板
		// 网格布局GridLayout(int rows, int columns, int hgap, int vgap)行数，列数，组件水平间距，垂直间距
		jp1.setBorder(BorderFactory.createTitledBorder("按作者查询"));
		JLabel jl1 = new JLabel("作者姓名:");
		jtf = new JTextField(10);
		jp1.add(jl1);// 在面板jp1上添加标签jl1
		jp1.add(jtf);// 在面板jp1上添加输入框

		jpc.add(jp1);// 把面板jp1加到流式布局上

		add(jpc);// 添加流式布局

		JButton jb1 = new JButton("查询");
		jb1.addActionListener(this);
		jb1.setActionCommand("yes6");// 没看懂

		JPanel jp2 = new JPanel();// 新面板，用于放置按钮
		jp2.add(jb1);
		returnbutton = new JButton("返回");
		returnbutton.addActionListener(this);
		returnbutton.setActionCommand("returnreader");
		jp2.add(returnbutton);
		add(jp2, BorderLayout.SOUTH);// 把按钮放到窗口最下方

		setTitle("作者查询界面");
		setSize(280, 125);
		setLocationRelativeTo(null);// 窗口居中
		// 组件为空，或者与此组件关联的图形配置为空，则窗口将位于屏幕的中心。
		setDefaultCloseOperation(EXIT_ON_CLOSE);//
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		BookSearch1 booksearch1 = new BookSearch1();
		BookSearch2 booksearch2 = new BookSearch2();
		ChangeBook changebook = new ChangeBook();
		ArrayList<Book> booklist = changebook.read(db1);
		ForeignKey foreignkey = new ForeignKey();
		if (e.getActionCommand().equals("yes1")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入书籍编号");
			} else if (!foreignkey.FindB_ID(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_idbuttonlibrarian();
			} else {
				this.dispose();
				booksearch2.searchb_idlibrarian(db1, text);
			}
		}else if (e.getActionCommand().equals("yes2")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入书籍编号");
			} else if (!foreignkey.FindB_ID(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_idbuttonreader();
			} else {
				this.dispose();
				booksearch2.searchb_idreader(db1, text);
			}
		}  else if (e.getActionCommand().equals("yes3")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入书籍名称");
			}else if (!foreignkey.FindB_NAME(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_namebuttonlibrarian();
			} else {
				this.dispose();
				booksearch2.searchb_namelibrarian(db1, text);
			}
		}else if (e.getActionCommand().equals("yes4")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入书籍名称");
			}else if (!foreignkey.FindB_NAME(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_namebuttonreader();
			} else {
				this.dispose();
				booksearch2.searchb_namereader(db1, text);
			}
		} else if (e.getActionCommand().equals("yes5")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入作者姓名");
			} else if (!foreignkey.FindB_AUTHOR(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_authorbuttonlibrarian();
			}else {
				this.dispose();
				booksearch2.searchb_authorlibrarian(db1, text);
			}
		}else if (e.getActionCommand().equals("yes6")) {
			String text = jtf.getText().trim();
			if (text.equals("")) {
				JOptionPane.showMessageDialog(this, "你还没有输入作者姓名");
			} else if (!foreignkey.FindB_AUTHOR(booklist, text)) {
				JOptionPane.showMessageDialog(this, "查无此书，请重新输入！");
				booksearch1.Searchb_authorbuttonreader();
			}else {
				this.dispose();
				booksearch2.searchb_authorreader(db1, text);
			}
		} else if (e.getActionCommand().equals("returnlibrarian")) {// 返回
			this.dispose();
			new BookSearchButtonlibrarian();
		}else if (e.getActionCommand().equals("returnreader")) {// 返回
			this.dispose();
			new BookSearchButtons();
		} else {
			jtf.setText("");
		}
	}
}
